// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery
//= require jquery_ujs
//= require_tree .


//####### GLOBALE FUNKTIONEN FÜR SUBMENU ########

/*
 * 'NEU' - Event registrieren:
 * triggerDOM -> Selector des DOM-Elements, das die Aktion auslöst.
 * destinationDOM -> Das DOM-Element, in das die Daten geladen werden sollen.
 * source -> Die URL des zu ladenden Inhalts.
 */
function newItem(triggerDOM, destinationDOM, sourceURL){
	$( document ).on("click", triggerDOM, function(){
		$( destinationDOM ).load(sourceURL, function( response, status, xhr ) {
                    if ( status == "error" ) {
                        showDialog("error","Maximale Anzahl User Stories erreicht","Es konnte keine neue User Story angelegt werden! Die Maximale Anzahl an User Stories wurde erreicht.");
                    }
                });
	});
}

/*
 * 'Show/Hide' - Event registrieren:
 * triggerDOM -> Selector des DOM-Elements, das die Aktion auslöst.
 * DOMToHide -> Selector des DOM-Elements, das ein/ausgeblendet werden soll.
 * TooltipMessageIfShowing -> Die Nachricht, die der Tooltip anzeigt, wenn das DOM-Element ausgeblendet ist.
 * TooltipMessageIfhidden -> Die Nachricht, die der Tooltip anzeigt, wenn das DOM-Element eingeblendet ist. 
 * iconToChange -> Selector des icons, dessen 'ALT'-Tag für den Tooltip geändert werden muss.
 * DOMToMove -> Selector des DOM-Elements, das beim ein/ausblenden beweget werden muss.
 * value -> Der Wert in Px um den DOMToMove verschoben werden muss.
 */
function showOrHide(triggerDOM, DOMToHide, TooltipMessageIfHidden, TooltipMessageIfShowing, iconToChange, DOMToMove, value){
	$( document ).on("click", triggerDOM, function(){
		if($( DOMToHide ).css("display") == "none"){
			$( "#tooltip" ).html(TooltipMessageIfHidden);
			$( iconToChange ).attr("alt", TooltipMessageIfHidden);
			$( DOMToHide ).fadeIn(100);
			$( DOMToMove ).css("top", (parseInt($( DOMToMove ).css("top").split("px")[0])+parseInt(value))+"px");
		}else{
			$( "#tooltip" ).html(TooltipMessageIfShowing);
			$( iconToChange ).attr("alt", TooltipMessageIfShowing);
			$( DOMToHide ).fadeOut(100);
			$( DOMToMove ).css("top", (parseInt($( DOMToMove ).css("top").split("px")[0])-parseInt(value))+"px");
		}
	});
}

/*
 * Globale Variable chooseModus zeigt an, ob der Nutzer sich im Auswahlmodus befindet.
 */
var chooseModus = false;
/*
 * Globale Variable markedStories enthält alle im Auswahlmodus ausgewählten Elemente.
 */
var marked = new Array();
/*
 * Globale Variable items enthält alle, im Auswahlmodus ausgewählten Elemente, in 
 * folgendem Format: element1,element2,...,elementn
 */
var items = "";
/*
 * 'chooseMode' - Event registrieren, behandelt das wechseln zwischen Auswahl und Einzelmodus.
 * triggerDOM -> Selector des DOM-Elements, das die Aktion auslöst.
 * iconToChange -> Selector des DOM-Elements (icon) dessen Alt text für den Tooltip geändert werden muss.
 */
function chooseMode( triggerDOM, iconToChange ){
	$( document ).on("click", triggerDOM, function(){
		var newAlt = "";
		
		if( chooseModus ) {
			chooseModus = false;

			newAlt = "In den Auswahlmodus wechseln";
			
			$( ".marked" ).each(function(i){
				$( this ).removeClass("marked");
			});
			marked = new Array();
			
			$( iconToChange ).attr("src", "/assets/layout/System.png");
		} else {
			chooseModus = true;
			$( ".marked" ).each(function(i){
				$( this ).removeClass("marked");
			});
			newAlt = "Den Auswahlmodus verlassen";
			$( iconToChange ).attr("src", "/assets/layout/Abort.png");
		}

		$( "#tooltip" ).html(newAlt);
		$( iconToChange ).attr("alt", newAlt);
	});
}

/*
 * 'deleteElements' Event registrieren, sammelt alle ausgewählten Elemente in der globalen Variable 'items'
 * und erzeugt einen Überprüfungsdialog. Wird dieser Dialog bestätigt, so erfolgt dies über das anklicken eines 
 * Links mit der id 'confirm' (#confirm). Der Klick auf diesen Link muss innerhalb der entsprechenden Javascript datei
 * abgefangen und behandelt werden.
 * triggerDOM -> Selector des DOM-Elements, das die Aktion auslöst.
 * elementSingular -> Beschreibung des Elementes im Singular z.B. "das Projekt".
 * elementPlural -> Beschreibung des Elements im Plural z.B. "die Projekte".
 * indefiniteArticle -> Der unbestimmte Artikel des Elements im Singular z.B. "ein" (-Projekt).
 */
function deleteElements(triggerDOM, elementSingular, elementPlural, indefiniteArticle){
	$( document ).on("click", triggerDOM, function(){
		var headline = "L&ouml;schen";
		var message = new Array();
		message[0] = "D" + elementPlural.substring(1, elementPlural.length) +
					 "<p>";
					 //In diesem <p>-Tag 'items' ausgeben.
		message[1] = "</p>" +
					 "werden unwiederruflich gel&ouml;scht." +
					 "<p>" +
					 	"<a href=\"javascript:void(null)\" id=\"confirm\">" +
							"<img alt=\"Best&auml;tigen\" class=\"icon\" id=\"confirmIcon\" src=\"/assets/layout/OK.png\"/> Best&auml;tigen" +
						"</a>" +
							"<a href=\"javascript:void(null)\" id=\"cancel\" class=\"closeButton\">" +
						  	"<img alt=\"Abbrechen\" class=\"icon\" id=\"cancelIcon\" src=\"/assets/layout/Cancel.png\"/> Abbrechen" +
						"</a>" +
					 "</p>";
		
		var errorHeadline = "Es ist ein Fehler aufgetreten";
		var errorMessage = "Bitte w&auml;hlen Sie mindestens " + indefiniteArticle + " " + elementSingular.split(" ")[1] + " aus, die gelöscht werden soll.";
		
		if(chooseModus){
	    	if(marked.length > 0){
	    		items = "";
	        	
	        	marked.forEach(function logArrayElements(element, index, array) {
	        		items += element+",";
	        	});
	        	
	        	items = items.substring(0, items.length-1);
	        	
	        	showDialog('warning', headline, message[0] + items + message[1]);
	    	}else{
	    		showDialog('error', errorHeadline, errorMessage);
	    	}
		}else {
			var countItems = 0;
	    	$( ".marked" ).each(function() {
	    		items = this.id.split("_")[1];
	    		countItems++;
	    	});
			//Prüfen ob tatsächlich nur ein Item ausgewählt wurde.
	    	if(countItems == 1){	
				marked.push(items);
				
	    		showDialog('warning', headline, message[0] + items + message[1]);
	    	}else{
	    		showDialog('error', errorHeadline, errorMessage);
			}
		}
	});
}

/*
 * 'markedItems' Event Registrieren. Fügt, während man sich im Auswahlmodus befindet, alle angeklickten Items einer Liste hinzu.
 * triggerDOM -> Selektor des DOM-Elements, welches das Event auslösen soll. (z.B. class aller UserStories)
 * desitnationDOM -> Selektor des DOM-Elements, in welchem der Edit Dialog eingefügt werden soll, falls der Nutzer sich nicht im Auswahlmodus befindet.
 * sourceURL -> Die URL, unter der das Edit-Form zu finden ist.
 */
function markedItems(triggerDOM, destinationDOM, sourceURL){
	$( document ).on("click", triggerDOM, function(){
		var id = this.id.split("_")[1];
		
		if(chooseModus){	
			if($.inArray(id, marked) >= 0){
				marked.splice($.inArray(id, marked), 1);
				$( "#"+this.id ).removeClass("marked");
			}else{
				marked.push(id);
				$( "#"+this.id ).addClass("marked");
			}
		}else{
			//Falls der Nutzer sich nicht im Auswahlmodus befindet, soll der entsprechende Eintrag angezeigt werden.
	    	$( ".marked" ).removeClass("marked");
	    	$( this ).addClass("marked");
			$( destinationDOM ).load( sourceURL + id );
		}
	});
}
//####### SHADER/DIALOG/TOOLTIP ########

$(document).ready(function(){
	//Handler für closeButton im Shader/Dialog
	$(document).on("click", ".closeButton", function(){
		$("#shader").css("display","none");
	});
    
	//Einblenden des Tooltips
	$(".subMenu, #sprintbacklog").on("mouseenter", ".icon", function(){
		$("#tooltip").css("left", $(this).offset().left);
		$("#tooltip").css("top", $(this).offset().top+10);
		$("#tooltip").html($(this).attr("alt"));
		$("#tooltip").css("display","inline");
	});
	
	//Ausblenden des Tooltips
	$(".subMenu, #sprintbacklog").on("mouseleave", ".icon", function(){
		$("#tooltip").css("display","none");
	});
});

/*
 * Zeigt einen Dialog mit entsprechendem icon an.
 * Level kann sein: 'error', 'notice' oder 'warning'
 */
function showDialog(level, headline, message){
	switch(level){
		case 'notice': 
			$("#icon").attr("src", "/assets/layout/dialog/Info.png");
			break;
		case 'warning':
			$("#icon").attr("src", "/assets/layout/dialog/Warning.png");
			break;
		default:
			$("#icon").attr("src", "/assets/layout/dialog/Error.png");
			break;
	}
	
	$("#dialogMessage").html(message);
	$("#dialogHeadline").html(headline);
	$("#shader").css("display","inline");
}


function changeActiveProject(triggerDOM, destinationDOM, sourceURL){
    $(document).on("change", triggerDOM, function(){
        $( destinationDOM ).load(sourceURL + "?active_project_id=" + this.value,function(){
        	if(triggerDOM == "#productBacklogMenu #project_to_user_project_id")
        		drawChart();
        });
    });
}